Cut (logic Programming)
   HOME

TheInfoList



OR:

The cut, in
Prolog Prolog is a logic programming language associated with artificial intelligence and computational linguistics. Prolog has its roots in first-order logic, a formal logic, and unlike many other programming languages, Prolog is intended primarily ...
, is a
goal A goal is an idea of the future or desired result that a person or a group of people envision, plan and commit to achieve. People endeavour to reach goals within a finite time by setting deadlines. A goal is roughly similar to a purpose or ...
, written as !, which always succeeds, but cannot be backtracked. Cuts can be used to prevent unwanted
backtracking Backtracking is a class of algorithms for finding solutions to some computational problems, notably constraint satisfaction problems, that incrementally builds candidates to the solutions, and abandons a candidate ("backtracks") as soon as it d ...
, which could add unwanted solutions and/or space/time overhead to a query. The cut should be used sparingly. While cuts can be inserted into codes containing errors, if a test is unnecessary because a cut has guaranteed that it is true, it is good practice to say so in a comment at the appropriate place. Some programmers call the cut a controversial control facility
Foundations of Logic Programming
', Springer (2012).
because it was added for efficiency reasons only and is not a Horn clause.


Types


Green cut

The use of a cut which only improves efficiency is referred to as a green cut. Green cuts are used to make programs more efficient without changing program output. For example: gamble(X) :- gotmoney(X),!. gamble(X) :- gotcredit(X), \+ gotmoney(X). This is called a ' cut operator. The ! tells the interpreter to stop looking for alternatives; however, if fails it will check the second rule. Although checking for in the second rule may appear redundant since Prolog's appearance is dependent on failing before, otherwise the second rule would not be evaluated in the first place. Adding guarantees that the second rule will always work, even if the first rule is removed by accident or changed, or moved after the second one.


Red cut

A cut that is not a ''green cut'' is referred to as a '' cut'', for example: gamble(X) :- gotmoney(X),!. gamble(X) :- gotcredit(X). Proper placement of the cut operator and the order of the rules are required to determine their logical meaning. If for any reason the first rule is removed (e.g. by a cut-and-paste accident) or moved after the second one, the second rule will be broken, i.e., it will not guarantee the rule .


References

{{reflist Logic programming